1
性能悖论:为何正确代码反而更慢
AI023Lesson 6
00:00

性能悖论 表明,一个数学上完美的内核(例如 $out = x + y$)如果无法分摊 GPU 硬件的固定开销,其实际性能可能反而比 CPU 循环更差。这种现象通常表现为 启动开销

1. “正确性” 的误区

功能正确性并不等同于效率。尽管你的 Triton 代码可能正确地将任务分配到数千个线程中,但如果总工作量(N)较小,GPU 将处于低效利用状态。硬件花费在状态切换上的时间远多于实际执行算术运算的时间。

2. Python 测量陷阱

使用 Python 对 GPU 代码进行基准测试时 time.time() 存在风险。GPU 调用是 异步;Python 只是 排队 命令并继续执行。若不使用 torch.cuda.synchronize(),你测量的是排队时间。通过同步,你测量的是 主机到设备的延迟,这通常比内核执行本身长 10 倍。

Python/驱动程序开销(启动开销)内核时间(毫秒)

3. 延迟与吞吐量

为克服这一悖论,你必须提供足够的工作量来“隐藏”启动延迟。这正是从 延迟受限 模式(受限于 CPU-GPU 总线)转变为 吞吐量受限 模式(受限于 GPU 内存或计算能力)。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>